package info.qingshui.browser;



import info.qingshui.browser.R;

import info.qingshui.browser.hk.StartupAsyncTask;
import info.qingshui.browser.hk.UpdateManager;
import info.qingshui.browser.hk.setting.Setting;
import info.qingshui.browser.hk.setting.SettingActivity;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.DialogInterface.OnClickListener;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;

public class BaseActivity extends Activity {
	protected String name;
	
	public BrowserApplication getBrowserApplication() {
		return (BrowserApplication)super.getApplication();
	
	}
	
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate( savedInstanceState );

		this.getBrowserApplication().onNewActivity(this.name, this);

		//Log.d(BaseActivity.class.getSimpleName(), "onCreate");
	}
	
	
	public Setting getSetting() {
		return getBrowserApplication().getSetting();
	}
	
	// 该方法在 onCreate() 方法之后被调用，或者在 Activity 从 Stop 状态转换为 Active 状态时被调用。
	protected void onStart() {
		super.onStart();
		

		//Log.d(BaseActivity.class.getSimpleName(), "onStart");
	}

	// 在 Activity 从 Pause 状态转换到 Active 状态时被调用。
	protected void onResume() {
		super.onResume();
		// WebView.enablePlatformNotifications();//试用代理时用


		//Log.d(HKActivity.class.getSimpleName(), "onResume");
	}

	protected void onPause() {
		// 在 Activity 从 Active 状态转换到 Pause 状态时被调用。

		// ObjectDB.getObjectDB( this ).saveObject(this.webView);
		// WebView.disablePlatformNotifications();//代理时用
		// if ( this.savedInstanceState != null ) {
		// savedInstanceState.putString("lastURL",webView.getUrl());
		//
		// savedInstanceState.putSerializable( WEB_VIEW_BUNLDE_NAME,webView);
		// }

		Log.d(Main.class.getSimpleName(), "onPause");
		super.onPause();
	}

	protected void onStop() {
		// 在 Activity 从 Active 状态转换到 Stop 状态时被调用。一般我们在这里保存 Activity 的状态信息。

		// ObjectDB.getObjectDB( this ).saveObject(this.webView);
		Log.d(BaseActivity.class.getSimpleName(), "onStop");
		super.onStop();
	}

	protected void onDestroy() {
		// 在 Active 被结束时调用，它是被结束时调用的最后一个方法，在这里一般做些释放资源，清理内存等工作。
		super.onDestroy();
		this.getBrowserApplication().onFinalActivity(name);
		Log.d(BaseActivity.class.getSimpleName(), "BaseActivity onDestroy " + name);
	}
	
	protected void onSaveInstanceState(Bundle outState) {
		super.onSaveInstanceState( outState );
		
	}
	
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		/*
		 * 
		 * add()方法的四个参数，依次是： 1、组别，如果不分组的话就写Menu.NONE,
		 * 2、Id，这个很重要，Android根据这个Id来确定不同的菜单 3、顺序，那个菜单现在在前面由这个参数的大小决定
		 * 4、文本，菜单的显示文本
		 */
		//menu.add(Menu.NONE, Menu.FIRST + 1, 1, getResources().getString(R.string.menu_index));
		// setIcon()方法为菜单设置图标，这里使用的是系统自带的图标，同学们留意一下,以
		// android.R开头的资源是系统提供的，我们自己提供的资源是以R开头的
		//menu.add(Menu.NONE, Menu.FIRST + 2, 2, getResources().getString(R.string.menu_back) );
		menu.add(Menu.NONE, Menu.FIRST + 3, 3, getResources().getString(R.string.menu_update_check));
		/*
		menu.add(Menu.NONE, Menu.FIRST + 4, 4, getResources().getString(R.string.common_rec));//推荐给好友
		*/
		menu.add(Menu.NONE, Menu.FIRST + 5, 5, getResources().getString(R.string.menu_config));
		menu.add(Menu.NONE, Menu.FIRST + 6, 6, getResources().getString(R.string.menu_exit));
		return true;
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		//super.onOptionsItemSelected(item);
		switch (item.getItemId()) {
			case Menu.FIRST + 1:
				// 返回首页
				return false;
			case Menu.FIRST + 2:
				// 后退
				
				return true;
			case Menu.FIRST + 3:
				// 检查更新
				 updateCheck();
				return false;
			case Menu.FIRST + 4:
				//推荐给好友
				rec();
				return false;
			case Menu.FIRST + 5:
				// 设置
				Intent intent =new Intent(BaseActivity.this,SettingActivity.class); 
				startActivity(intent); 
				return false;
			case Menu.FIRST + 6:
				// 退出
				// Toast.makeText(this, "发送菜单被点击了", Toast.LENGTH_LONG).show();
				this.getBrowserApplication().exit();
				return false;
		}
		return true;
	}
	
	private void updateCheck() {
		//判断当前是否需要升级
		Setting setting = this.getBrowserApplication().getSetting();
		setting.loadConfigsSetting();
		if( setting.isNeedUpdateVersion() ) {
			//setting.setRemaindedUpdate(true);
			UpdateManager updateManager = new UpdateManager(setting, BaseActivity.this ,setting.getUpdateDesc(), setting.getUpdateVersionUrl() );
			updateManager.checkUpdateInfo();
		} else {
			//
			Toast.makeText(this, getResources().getString(R.string.toast_update_check_noupdate), Toast.LENGTH_LONG).show();
		}
	}
	
	private void rec() {
		Intent intent = new Intent(Intent.ACTION_SENDTO, Uri.parse("smsto:"));
		intent.putExtra("sms_body", getResources().getString(R.string.common_rec_content));
		startActivity(intent);
	}
	
	// 覆盖Activity类的onKeyDown(int keyCoder,KeyEvent event)方法
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		switch (keyCode) {
//			case KeyEvent.KEYCODE_VOLUME_DOWN:
//				// scrollToPageDown();
//				webView.pageDown(false);
//				return true;
//			case KeyEvent.KEYCODE_VOLUME_UP:
//				// scrollToPageUp();
//				webView.pageUp(false);
//				return true;
			case KeyEvent.KEYCODE_BACK:
				//后退键
				exitConfirm();
				return true;
			default:
				super.onKeyDown(keyCode, event);
		}

		return false;
	}
	
	public void exitConfirm() {
		//退出确认
		AlertDialog.Builder builder = new Builder(BaseActivity.this);
		builder.setTitle(getResources().getString(R.string.common_exit_title));
		builder.setMessage( R.string.common_exit_content );
		builder.setPositiveButton( getResources().getString(R.string.common_ok), new OnClickListener() {
			@Override
			public void onClick(DialogInterface dialog, int which) {
				dialog.dismiss();
				BaseActivity.this.finish();
				getBrowserApplication().exit();
			}
		});
		
		builder.setNegativeButton( getResources().getString(R.string.common_cancel), new OnClickListener() {
			@Override
			public void onClick(DialogInterface dialog, int which) {
				dialog.dismiss();
			}
		});
		builder.create().show();
	}
}
